import request from './request';

// 用户信息类型
export interface User {
  id: number;
  nickname: string;
  email: string;
  password: string;
  gender: string;
  personalIntroduce: string;
  birthday: string;
  isLogin: string;
  avatar: string;
  role: number;
  status: number;
}

// 分页响应类型
export interface UserPageVO {
  content: User[];
  totalPages: number;
  totalElements: number;
  number: number;
  size: number;
}

// 通用响应类型
export interface ResultUserPageVO {
  code: number;
  message: string;
  data: UserPageVO;
}

/**
 * 获取所有用户（分页、排序）
 * @param params { page?: number; size?: number; state?: number }
 * @returns Promise<ResultUserPageVO>
 */
export function getAllUsers(params?: {
  page?: number;
  size?: number;
  state?: number;
}): Promise<ResultUserPageVO> {
  return request.get<ResultUserPageVO>('/managers/getAllUsers', {
    params,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
  }).then(res => res.data);
}

/**
 * 修改用户状态
 * @param params { userId: number; state: number }
 * @returns Promise<{ code: number; message: string; data: object }>
 */
export function changeUserState(params: {
  userId: number;
  state: number;
}): Promise<{ code: number; message: string; data: object }> {
  return request.post('/managers/changeUserState', null, {
    params,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
  }).then(res => res.data);
}

// 帖子预览类型
export interface PostPreviewVO {
  id: number;
  title: string;
  authorId: number;
  createTime: string;
  commentCount: number;
  likeCount: number;
  categoryId: number;
  categoryName: string;
  authorNickname: string;
  authorAvatar: string;
  status: number;
}

// 分页响应类型
export interface PageResultVOPostPreviewVO {
  records: PostPreviewVO[];
  pageNum: number;
  pageSize: number;
  total: number;
  totalPages: number;
}

// 通用响应类型
export interface ResultPageResultVOPostPreviewVO {
  code: number;
  message: string;
  data: PageResultVOPostPreviewVO;
}

/**
 * 分页获取所有帖子（可按status/category筛选）
 * @param params { status?: number; categoryId?: number; page?: number; size?: number }
 * @returns Promise<ResultPageResultVOPostPreviewVO>
 */
export function getAllPostsForManager(params?: {
  status?: number;
  categoryId?: number;
  page?: number;
  size?: number;
}): Promise<ResultPageResultVOPostPreviewVO> {
  return request.get<ResultPageResultVOPostPreviewVO>('/managers/getAllPosts', {
    params,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
  }).then(res => res.data);
}

/**
 * 修改帖子状态
 * @param params { postId: number; state: number }
 * @returns Promise<{ code: number; message: string; data: object }>
 */
export function changePostState(params: {
  postId: number;
  state: number;
}): Promise<{ code: number; message: string; data: object }> {
  return request.post('/managers/changePostState', null, {
    params,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
  }).then(res => res.data);
}

// 资源详情类型
export interface ResourceDetailVO {
  id: number;              // 资源ID
  title: string;           // 资源标题
  description: string;     // 资源描述
  status: number;          // 资源状态（0-删除，1-正常，2-封禁）
  fileUrl: string;         // 文件URL
  fileSize: number;        // 文件大小（字节）
  fileType: string;        // 文件类型（带点的后缀，如.md、.pdf等）
  categoryId: number;      // 分类ID（1-文档，2-课件，3-试卷，4-其他）
  downloadCount: number;   // 下载次数
  likeCount: number;       // 点赞数
  createdAt: string;       // 创建时间
  userId: number;          // 上传用户ID
  userName?: string;       // 上传用户名（可能为null）
  nickname?: string;       // 用户昵称（可能为null）
}

// 资源分页响应类型
export interface PageResultVOResourceDetailVO {
  records: ResourceDetailVO[];
  pageNum: number;
  pageSize: number;
  total: number;
  totalPages: number;
}

// 资源分页响应包装类型
export interface ResultPageResultVOResourceDetailVO {
  code: number;
  message: string;
  data: PageResultVOResourceDetailVO;
}

/**
 * 分页获取全部资源（可按分类、类型、状态筛选）
 * @param params 查询参数对象
 * @param params.page 页码（从0开始，默认0）
 * @param params.size 每页数量（默认10）
 * @param params.categoryId 分类ID（可选）
 *   - 1: 文档
 *   - 2: 课件
 *   - 3: 试卷
 *   - 4: 其他
 * @param params.fileType 文件类型（可选，后端返回带点的后缀如.md）
 *   支持的类型：pdf, docx, pptx, xlsx, zip, doc, md, 其他
 * @param params.state 资源状态（可选）
 *   - 0: 删除
 *   - 1: 正常
 *   - 2: 封禁
 * @returns Promise<ResultPageResultVOResourceDetailVO> 分页资源列表
 */
export function getAllResources(params?: {
  page?: number;
  size?: number;
  categoryId?: number;
  fileType?: string;
  state?: number;
}): Promise<ResultPageResultVOResourceDetailVO> {
  return request.get('/managers/getAllResources', {
    params,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
  });
}

/**
 * 修改资源状态
 * @param params 参数对象
 * @param params.resourceId 资源ID
 * @param params.state 目标状态
 *   - 0: 删除
 *   - 1: 正常
 *   - 2: 封禁
 * @returns Promise<{ code: number; message: string; data: object }> 操作结果
 */
export function changeResourceState(params: {
  resourceId: number;
  state: number;
}): Promise<any> {
  return request.post('/managers/changeResourceState', null, {
    params,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
  });
}

// 平台统计信息类型
export interface ManagerStatisticsVO {
  userCount: number;
  postCount: number;
  resourceCount: number;
  pendingReportCount: number;
}

export interface ResultManagerStatisticsVO {
  code: number;
  message: string;
  data: ManagerStatisticsVO;
}

/**
 * 获取平台统计信息
 * @returns Promise<ResultManagerStatisticsVO>
 */
export function getPlatformStatistics(): Promise<ResultManagerStatisticsVO> {
  return request.get('/managers/getStatistics', {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
  });
}

// 管理员登录响应类型（含token）
export interface UserLoginVO {
  username: string;
  userId: number;
  status: number;
  role: number;
  token?: string;
}

/**
 * 管理员登录
 * @param params { username: string; password: string }
 * @returns Promise<ResultUserLoginVO>
 */
export function adminLogin(params: { username: string; password: string }): Promise<UserLoginVO> {
  return request.post('/managers/login', null, {
    params,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
  });
}
